Die Aufgabenstellung finden Sie hier: https://informatik-franke.de/lehre/sose/fadiinf/u3.html
Aufgaben
Definition und Grundprinzipien der Objektorientierung
Definition Objektorientierung
Objektorientierte Programmierung (OOP) ist ein Ansatz zur Softwareentwicklung, der Programme durch den Einsatz von Klassen und Objekten strukturiert. Klasssen dienen als 'Schablonen' oder 'Baupläne', die festlegen welche Eigenschaften (genannt Daten) und Fähigkeiten (genannt Methoden) daraus hergestellte Objekte haben.
Ein Objekt ist eine Instanz einer Klasse, aus der Schablone konkret gebaut, mit spezifischen Werten für seine Eigenschaften und mit der Fähigkeit, konkrete Aktionen durchzuführen.
OOP hilft, komplexe Programme in kleinere, wiederverwendbare und leichter verständliche Teile zu zerlegen. Dies soll die Wartung und Erweiterung von Software erleichtern.
Vorteile Objektorientierung
Von https://informatik-franke.de/lehre/wise/oop-python/u20.html
- Modularität: Der Code wird in verschiedene Objekte aufgeteilt, was die Wartung und das Testen vereinfacht
- Wiederverwendbarkeit: Durch Vererbung können neue Klassen basierend auf bestehenden Klassen erstellt werden, was Code-Duplikation vermeidet.
- Erweiterbarkeit: Bestehende Klassen können leicht erweitert werden, um neue Funktionalitäten hinzuzufügen.
- Abstraktion: OOP ermöglicht es, komplexe Realitätsausschnitte auf wesentliche Aspekte zu reduzieren und somit leichter im Code darzustellen.
Darstellung der Ansätze "Objects First" und "Objects Later"
Bei Objects first gibt es verschiedene Ansätze:
- Objekte benutzen: Es werden vorhandene Objekte bbenutzt und manipuliert, bevor implementiert wird.
- Klassen schreiben: Von Anfang an werden Klassen definiert, implementiert und instanziiert.
- Konzepte: Zunächst werden die abstrakten und generellen Ideen des Paradigmas vermittelt, wobei die objektorientierten Modelle im Mittelpunkt stehen.
In irgendeiner Art, werden also die Objekte zuerst modelliert, implementiert aber auf jeden Fall instanziert.
Vergleich und Kontrastierung der Ansätze
|
Objects-First |
Objects-Later |
| Reihenfolge der Themen |
Objektorientierte Themen kommen früh (z. B. Klassen und Objekte werden schon zu Beginn eingeführt). |
Erst die prozeduralen Grundlagen, dann später objektorientierte Konzepte. |
| Schwierigkeitswahrnehmung |
In manchen Themen können OOP-First-Schüler Probleme haben, wenn sie bereits früh mit Abstraktion (Klassen, Objekte, etc.) konfrontiert werden, bevor Grundlagen wie Kontrollstrukturen, einfache Datenstrukturen etc. gefestigt sind. (→ höhere kognitive Belastung) |
Lernende haben zuerst Gelegenheit, einfache Programmierprinzipien zu üben und sich mit Basis-Programmiekonzepten sicher zu fühlen, bevor komplexere (OOP) Konzepte folgen. |
| Motivation / Einstellung |
Früh gewonnenes Interesse an OOP, evtl. schnelleres Verständnis des OO-Paradigmas, evtl. weniger Furcht vor „Objektorientierung“. Schule und Studierende berichten manchmal, dass OOP-First motivierender wirkt. (Das zeigen auch andere Studien, z. B. “Outside-In”-Ansätze.) (arXiv) |
Motivation kann während der Wartezeit bis zur Einführung von OOP geringer sein oder das Interesse könnte erst später steigen. |
Bewertung der Vor- und Nachteile
Objects-First
Vorteile
- Frühzeitiger Einstieg in moderne Paradigmen.
OOP ist in der Praxis sehr relevant, wenn Schüler:innen direkt mit OOP beginnen, bekommen sie früh ein Gefühl für die Denkweise von Objekten, Klassen, Vererbung usw.
- Motivation / Interesse.
Neue und "höherwertige" Konzepte zu Beginn können motivierend wirekn. Sichtbarkeit dessen, wofür man später programmiert, kann höher sein, wenn Objekte von Anfang an gezeigt werden.
- Integration und Kontext.
Durch früh einsetzende OOP-Konzepte können spätere Themen in OOP-Kontexten präsentiert werden, was die Vernetzung von Wissen begünstigt.
Nachteile
- Kognitive Überlastung.
Schüler:innen, die mit wenig Programmiererfahrung/Logikzerlegungsfähigkeiten kommen, könnten überfordert sein, wenn direkt mit Abstraktionen gearbeitet wird, ohne solide Grundlagen.
- Langsame Entwicklung von Kontrollstrukturen.
Manchmal kann das Erlernen von Schleifen, Bedingungen, grundlegenden Datentypen später weniger gründlich sein, wenn der Fokus zu früh auf Objekten liegt.
- Verwirrung durch Abstraktion
Früh eingeführte Konzepte wie Vererbung, Assoziation, Schnittstellen können abstrakt sein und ohne gutes Beispielmaterial schwer greifbar.
Objects-Later
Vorteile
- Solide Grundlagen
Schüler:innen können erste Sicherheit gewinnen in einfacheren Programmierprinzipien und damit ein Fundament bauen, auf dem komplexere Konzepte später besser darauf aufbauen.
- Schrittweise Steigerung der Komplexität
Der Weg vom Einfachen zum Komplexen kann Lernenden helfen, Wissen zu verankern und Selbstvertrauen aufzubauen.
- Weniger Überforderung am Anfang
Für Anfänger:innen scheint es oft angenehmer, sich zuerst mit Sequenzen, Variablen, einfachen Kontrollstrukturen vertraut zu machen.
Nachteile
- Späterer Bezug zur Objektorientierung
Wenn OOP erst später eingeführt wird, kann das Interesse sinken oder der Kontext weniger klar sein
- Fragmentierung / wenig Vernetzung
Wenn man später mit OOP beginnt, könnte die Verbindung zwischen prozeduraler und objektorientierter Programmierung weniger deutlich sein, und manche Lernende sehen die OOP-Konzepte nicht im Zusammenhang.
- Motivationale Herausforderungen
Einige Schüler könnten sich langweilen oder weniger engagiert sein, wenn die anfänglichen Themen als zu einfach empfunden werden, bevor sie „richtige“ Objekte/Design etc. sehen.
Eigene Schlussfolgerung
Die Studie von Ehlert zeigt, dass es in einem Schuljahr mit gleichen Themen keine großen Unterschiede im Lernerfolg gibt.
Es macht also Sinn, die Anstäze angepasst auf die Schüler:innnen und deren Lernsituation anzuwenden. Abhängig von deren Wahrnehmung, Motivation und Anspruch kann eher mit dem einen oder anderen Ansatz begonnen werden.
Der bessere Ansatz hängt vorallem ab von den Vorkenntnissen der Schüler:innen, dem gegebenen Zeitrahmen (längerfristig vielleicht mehr OOP first, kurzfristig lieber Fokus auf Kontrollstrukturen) und natürlich den gegebenen didaktischen und materiellen Möglichkeiten.
Ich würde mit Schüler:innen umso eher mit OOP-First anfangen, je wahrscheinlicher es ist, dass sie längerfristigen Informatikunterricht haben. Also Klassen, die in der Schule wahrscheinlich noch viele Jahre Informatikunterricht haben werden. Auch würde ich OOP-First eher verwenden in technischem Umfeld, bei Schüler:innen bei deinen eine Karriere mit Programmieranteil wahrscheinlicher ist.
Handelt es sich dagegen um Schüler:innen die lediglich einen Einblick in die Informatik erhalten, würde ich den Fokus mehr auf programmatisches, strukturiertes Denken mit klassischem prozeduralen Ansatz legen.
Quelle